﻿using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos
{
    public static class Documentos_AjusteSaldo
    {
        #region SELECT

        public static Respuesta InsertAjuste_Saldo(

            int Id_Documento,
            Documentos_Id Tipo_Documento
        )
        {
            string Tabla = "";
            string Id = "";

            if(Tipo_Documento == Documentos_Id.Doc_CotizacionVenta)
            {
                Tabla = "dbo_Trans_Cotizacion_Compra_Cab";
                Id = "Id_Cotizacion_Compra";
            }
            if(Tipo_Documento == Documentos_Id.Doc_Pedido)
            {
                Tabla = "dbo_Trans_Pedido_Cab";
                Id = "Id_Pedido";
            }
            if(Tipo_Documento == Documentos_Id.Doc_Remision)
            {
                Tabla = "dbo_Trans_Remision_Cab";
                Id = "Id_Remision";
            }
            if(Tipo_Documento == Documentos_Id.Doc_FacturaCliente)
            {
                Tabla = "dbo_Trans_Factura_Cliente_Cab";
                Id = "Id_Factura_Cliente";
            }
            if(Tipo_Documento == Documentos_Id.Doc_DevolucionCliente)
            {
                Tabla = "dbo_Trans_Devolucion_Cliente_Cab";
                Id = "Id_Devolucion_Cliente";
            }
            if(Tipo_Documento == Documentos_Id.Doc_NotaCreditoCliente)
            {
                Tabla = "dbo_Trans_Nota_Credito_Cliente_Cab";
                Id = "Id_Nota_Credito_Cliente";
            }
            if(Tipo_Documento == Documentos_Id.Doc_NotaCargoCliente)
            {
                Tabla = "dbo_dbo_Trans_Nota_Cargo_Cliente_Cab";
                Id = "Id_Nota_Cargo_Cliente";
            }
            if(Tipo_Documento == Documentos_Id.Doc_ReciboHonorariosVentas)
            {
                Tabla = "dbo_Trans_ReciboHonorarios_Cliente_Cab";
                Id = "Id_ReciboHonorarios_Cliente";
            }
            if(Tipo_Documento == Documentos_Id.Doc_ReciboArrendamientoVentas)
            {
                Tabla = "dbo_Trans_ReciboArrendamiento_Cliente_Cab";
                Id = "Id_ReciboArrendamiento_Cliente";
            }
            if(Tipo_Documento == Documentos_Id.Doc_ReciboNominaVentas)
            {
                Tabla = "dbo_Trans_ReciboNomina_Cliente_Cab";
                Id = "Id_ReciboNomina_Cliente";
            }
            if(Tipo_Documento == Documentos_Id.Doc_CotizacionCompra)
            {
                Tabla = "dbo_Trans_Cotizacion_Compra_Cab";
                Id = "Id_Cotizacion_Compra";
            }
            if(Tipo_Documento == Documentos_Id.Doc_OrdenCompra)
            {
                Tabla = "dbo_Trans_OrdenCompra_Cab";
                Id = "Id_OrdenCompra";
            }
            if(Tipo_Documento == Documentos_Id.Doc_Recepcion)
            {
                Tabla = "dbo_Trans_Recepcion_Cab";
                Id = "Id_Recepcion";
            }
            if(Tipo_Documento == Documentos_Id.Doc_FacturaProveedor)
            {
                Tabla = "dbo_Trans_Factura_Proveedor_Cab";
                Id = "Id_Factura_Proveedor";
            }
            if(Tipo_Documento == Documentos_Id.Doc_DevolucionProveedor)
            {
                Tabla = "dbo_Trans_Devolucion_Proveedor_Cab";
                Id = "Id_Devolucion_Proveedor";
            }
            if(Tipo_Documento == Documentos_Id.Doc_NotaCreditoProveedor)
            {
                Tabla = "dbo_Trans_Nota_Credito_Proveedor_Cab";
                Id = "Id_Nota_Credito_Proveedor";
            }
            if(Tipo_Documento == Documentos_Id.Doc_NotaCargoProveedor)
            {
                Tabla = "dbo_Trans_Nota_Cargo_Proveedor_Cab";
                Id = "Id_Nota_Cargo_Proveedor";
            }
            if(Tipo_Documento == Documentos_Id.Doc_ReciboHonorariosCompras)
            {
                Tabla = "dbo_Trans_ReciboHonorarios_Compras_Cab";
                Id = "Id_ReciboHonorarios_Compras";
            }
            if(Tipo_Documento == Documentos_Id.Doc_ReciboArrendamientoCompras)
            {
                Tabla = "dbo_Trans_ReciboArrendamiento_Compras_Cab";
                Id = "Id_ReciboArrendamiento_Compras";
            }
            if(Tipo_Documento == Documentos_Id.Doc_ReciboNominaCompras)
            {
                Tabla = "dbo_Trans_ReciboNomina_Compras_Cab";
                Id = "Id_ReciboNomina_Compras";
            }
            if(Tipo_Documento == Documentos_Id.Doc_PagoCliente)
            {
                Tabla = "dbo_Trans_Pago_Cliente";
                Id = "Id_Pago";
            }
            if(Tipo_Documento == Documentos_Id.Doc_PagoProveedor)
            {
                Tabla = "dbo_Trans_Pago_Proveedor";
                Id = "Id_Pago";
            }
            if(Tipo_Documento == Documentos_Id.Doc_AjusteSaldo)
            {
                Tabla = "dbo_Trans_Ajuste_Saldo";
                Id = "Id_Ajuste";
            }
            if(Tipo_Documento == Documentos_Id.Doc_MovimientoInventario)
            {
                Tabla = "dbo_Trans_MovInv_Cab";
                Id = "Id_MovInventario";
            }
            if(Tipo_Documento == Documentos_Id.Doc_Oportunidad)
            {
                Tabla = "dbo_Trans_Pedido_Cab";
                Id = "Id_Pedido";
            }

            //1.- Obtener datos para el Saldo
            string Query1 = @"SELECT Saldo, Id_Moneda, RFC, Usuario_Alta FROM @@Tabla WHERE @@Id_Desc = @@Id"
                .Replace("@@Tabla", Tabla)
                .Replace("@@Id_Desc", Id)
                .Replace("@@Id", Id_Documento.ToString());

            DataTable Saldo = SrvDB.ExecuteQuery_Get(Query1);

            //2.- Establecer saldo en cero
            string Query2 = @"

                UPDATE @@Tabla SET Saldo = 0 WHERE @@TablaId = @@Id

            ".Replace("@@TablaId", Id)
             .Replace("@@Tabla", Tabla)             
             .Replace("@@Id", Id_Documento.ToString());

            Respuesta r2 = SrvDB.ExecuteQuery_Update(Query2);

            //3.- Obtener Próximo Id de Ajuste de Saldo
            string Query3 = @"
                
                SELECT DCount('*', 'dbo_Trans_Ajuste_Saldo') + 1 
            ";

            DataTable Dt_Query3 = SrvDB.ExecuteQuery_Get(Query3);

            //4.- Insertar Ajuste de Saldo
            string Query4 = @"

                INSERT INTO dbo_Trans_Ajuste_Saldo
                (
                    Id_Ajuste,
                    RFC,
                    Estatus,
                    Secuencia,
                    Tipo_Doc,
                    Id_Doc,
                    Importe,
                    Id_Moneda,
                    Fecha_Alta,
                    Usuario_Alta
                )
                VALUES
                (
                    IIF(DCount('*', 'dbo_Trans_Ajuste_Saldo') = 0, 1, DMax('Id_Ajuste', 'dbo_Trans_Ajuste_Saldo') + 1),
                    '@@RFC',
                    @@Estatus,
                    IIF(DCount('*', 'dbo_Trans_Ajuste_Saldo', ""RFC = '@@RFC'"") = 0, 1, DMax('Id_Ajuste', 'dbo_Trans_Ajuste_Saldo', ""RFC = '@@RFC'"") + 1),
                    @@Tipo_Doc,
                    @@Id_Doc,
                    @@Importe,
                    @@Id_Moneda,
                    NOW(),
                    '@@Usuario_Alta'
                )
            ".Replace("@@RFC", Saldo.Rows[0]["RFC"].ToString())
             .Replace("@@Estatus", EstatusDocs_Id.Estatus_Doc_Asentado.GetHashCode().ToString())
             .Replace("@@Tipo_Doc", Tipo_Documento.GetHashCode().ToString())
             .Replace("@@Id_Doc", Id_Documento.ToString())
             .Replace("@@Importe", Saldo.Rows[0]["Saldo"].ToString())
             .Replace("@@Id_Moneda", Saldo.Rows[0]["Id_Moneda"].ToString())
             .Replace("@@Usuario_Alta", Saldo.Rows[0]["Usuario_Alta"].ToString());

            Respuesta r4 = SrvDB.ExecuteQuery_Insert(Query4);

            string Query5 = @"
                
                INSERT INTO dbo_Trans_Relacion_Documentos
                (
                    Id_Relacion,
                    Tipo_Doc_Origen,
                    Id_Doc_Origen,
                    Tipo_Doc_Destino,
                    Id_Doc_Destino,
                    Fecha_Alta,
                    Usuario_Alta
                )
                VALUES
                (
                    IIF(DCount('*', 'dbo_Trans_Relacion_Documentos') = 0, 1, DMax('Id_Relacion', 'dbo_Trans_Relacion_Documentos') + 1),
                    @@Tipo_Doc_Origen,
                    @@Id_Doc_Origen,
                    @@Tipo_Doc_Destino,
                    @@Id_Doc_Destino,
                    NOW(),
                    '@@Usuario'
                )

            ".Replace("@@Tipo_Doc_Origen", Tipo_Documento.GetHashCode().ToString())
             .Replace("@@Id_Doc_Origen", Id_Documento.ToString())
             .Replace("@@Tipo_Doc_Destino", Documentos_Id.Doc_AjusteSaldo.GetHashCode().ToString())
             .Replace("@@Id_Doc_Destino", Dt_Query3.Rows[0][0].ToString())
             .Replace("@@Usuario", Saldo.Rows[0]["Usuario_Alta"].ToString());
            
            Respuesta r5 = SrvDB.ExecuteQuery_Insert(Query5);

            if (r2.Id == 1 && r4.Id == 1 && r5.Id == 1)

                return new Respuesta(1, "Correcto");
            else
                return new Respuesta(2, "Error");
        }

        #endregion
    }
}

